package gsw.tool.pluggable.hook.handler;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by baby on 2018/4/16.
 * 分发   hook方法名  ---》处理对应对象
 * 映射  ------分发给谁
 * method  方法级
 */

/**
 * 分发类
 * Hook系统对象时，需要对特定的方法进行扩展，这里使用分发类来统一处理系统对象。
 */
public abstract class BaseHandlerClass {
    //缓存需要扩展方法的名称与扩展实现
    protected Map<String, BaseHandlerMethod> hookMethodHandles = new HashMap<>();

    public BaseHandlerClass() {
        init(hookMethodHandles);
    }

    /**
     * 初始化操作：填充hookMethodHandles
     *
     * @param hookMethodHandles
     */
    protected abstract void init(Map<String, BaseHandlerMethod> hookMethodHandles);

    //根据方法名获取分发方法
    public BaseHandlerMethod getHookMethodHandler(String methodName) {
        if (methodName != null) {
            return hookMethodHandles.get(methodName);
        }
        return null;
    }
}
